#!/bin/bash
#
# 功能简介：启动当前目录下的 Java 可执行 Jar 文件
# 参数简介：
#     $1：Jar 文件名
#     注意：Jar 文件必须位于 startup.sh 目录的同一级目录

# JVM 启动参数（JDK 11）
JAVA_OPTS="-server -Xms4g -Xmx4g -Xss512k -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:InitialCodeCacheSize=240m -XX:ReservedCodeCacheSize=240m -XX:+AlwaysPreTouch -XX:+UseG1GC -XX:G1HeapRegionSize=4m -verbose:gc -Xlog:gc*:./g1-gc-%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump-%p.hprof -Dfile.encoding=UTF-8 -Djava.awt.headless=true"

jar_name=$1
pwd_path="$(cd "$(dirname $0)" || exit ; pwd)"
logs_dir="${pwd_path}/logs"
jar_file="${pwd_path}/${jar_name}"

# 参数个数小于 1 或者参数空值时，中断执行
if [[ $# -lt 1 ]] || [[ -z $1 ]]; then
    echo -e "\033[31m请输入要运行的 Jar 文件名称；如 sh startup.sh boot-exec-1.0.0.jar\033[0m"
    exit 1
fi

# 日志文件夹不存在，则创建
if [[ ! -d "${logs_dir}" ]]; then
    echo "mkdir '${logs_dir}'"
    mkdir "${logs_dir}"
fi

# 当前目录下 Jar 文件存在
if [[ -f "${jar_file}" ]]; then
    # 启动 Spring-Boot 应用，其中，spring.profiles.active 用于指定环境（dev/sit/prod），api.fakeRsp 用于指定是否挡板（true/false）
    nohup java ${JAVA_OPTS} -jar "${jar_file}" --spring.profiles.active=prod --api.fakeRsp=no &
    exit 0
else
    echo -e "\033[31m文件不存在：${jar_file}\033[0m"
    exit 1
fi

